package com.fx.ruankao.service.impl;

import com.fx.ruankao.entity.SysConfig;
import com.fx.ruankao.mapper.SysConfigMapper;
import com.fx.ruankao.service.SysConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.HashMap;

/**
 * 系统配置服务实现类
 */
@Service
@Transactional
public class SysConfigServiceImpl implements SysConfigService {
    
    @Autowired
    private SysConfigMapper sysConfigMapper;
    
    // 缓存配置数据，提高查询性能
    private Map<String, String> configCache = new HashMap<>();
    
    @Override
    public int insert(SysConfig sysConfig) {
        // 清除缓存
        clearCache();
        return sysConfigMapper.insert(sysConfig);
    }
    
    @Override
    public int deleteById(Integer id) {
        // 获取配置键
        SysConfig sysConfig = sysConfigMapper.selectById(id);
        if (sysConfig != null) {
            // 清除缓存
            clearCache();
        }
        return sysConfigMapper.deleteById(id);
    }
    
    @Override
    public int update(SysConfig sysConfig) {
        // 清除缓存
        clearCache();
        return sysConfigMapper.update(sysConfig);
    }
    
    @Override
    public SysConfig selectById(Integer id) {
        return sysConfigMapper.selectById(id);
    }
    
    @Override
    public SysConfig selectByConfigKey(String configKey) {
        return sysConfigMapper.selectByConfigKey(configKey);
    }
    
    @Override
    public List<SysConfig> selectAll() {
        return sysConfigMapper.selectAll();
    }
    
    @Override
    public List<SysConfig> selectByConfigType(String configType) {
        return sysConfigMapper.selectByConfigType(configType);
    }
    
    @Override
    public int batchUpdate(List<SysConfig> sysConfigs) {
        // 清除缓存
        clearCache();
        return sysConfigMapper.batchUpdate(sysConfigs);
    }
    
    @Override
    public String getConfigValue(String configKey) {
        // 先从缓存获取
        if (configCache.containsKey(configKey)) {
            return configCache.get(configKey);
        }
        
        // 缓存不存在则从数据库获取
        SysConfig sysConfig = sysConfigMapper.selectByConfigKey(configKey);
        if (sysConfig != null) {
            configCache.put(configKey, sysConfig.getConfigValue());
            return sysConfig.getConfigValue();
        }
        
        return null;
    }
    
    @Override
    public boolean setConfigValue(String configKey, String configValue) {
        SysConfig sysConfig = sysConfigMapper.selectByConfigKey(configKey);
        if (sysConfig != null) {
            sysConfig.setConfigValue(configValue);
            boolean result = sysConfigMapper.update(sysConfig) > 0;
            // 清除缓存
            clearCache();
            return result;
        } else {
            // 如果配置不存在，则新增
            sysConfig = new SysConfig();
            sysConfig.setConfigKey(configKey);
            sysConfig.setConfigValue(configValue);
            boolean result = sysConfigMapper.insert(sysConfig) > 0;
            // 清除缓存
            clearCache();
            return result;
        }
    }
    
    @Override
    public boolean checkConfigKeyExists(String configKey, Integer id) {
        return sysConfigMapper.checkConfigKeyExists(configKey, id) > 0;
    }
    
    /**
     * 清除配置缓存
     */
    private void clearCache() {
        configCache.clear();
    }
}